package com.futu.es.service;

import com.futu.es.domain.MangodbSpot;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.mongodb.repository.MongoRepository;
import org.springframework.data.mongodb.repository.Query;

import java.util.Date;
import java.util.List;

public interface MangodbService extends MongoRepository<MangodbSpot, String>  {

    /**
     * 根据用户ID查询访问记录
     */
    List<MangodbSpot> findByUserId(Long userId);

    /**
     * 根据景点ID查询访问记录
     */
    List<MangodbSpot> findBySpotId(Long spotId);

    /**
     * 根据用户ID和景点ID查询访问记录
     */
    List<MangodbSpot> findByUserIdAndSpotId(Long userId, Long spotId);

    /**
     * 根据用户名模糊查询
     */
    List<MangodbSpot> findByUsernameContaining(String username);

    /**
     * 根据景点名称模糊查询
     */
    List<MangodbSpot> findByNameContaining(String spotName);

    /**
     * 查询特定时间段内的访问记录
     */
    List<MangodbSpot> findByVisitTimeBetween(Date startTime, Date endTime);

    /**
     * 查询评分大于等于指定分数的记录
     */
    List<MangodbSpot> findByRatingGreaterThanEqual(Integer rating);

    /**
     * 自定义查询 - 根据用户ID和评分范围查询并分页
     */
    @Query("{'userId': ?0, 'rating': {$gte: ?1, $lte: ?2}}")
    Page<MangodbSpot> findByUserIdAndRatingBetween(Long userId, Integer minRating, Integer maxRating, Pageable pageable);

    /**
     * 自定义查询 - 根据地理位置范围查询附近的景点访问记录
     */
    @Query("{'latitude': {$gte: ?0, $lte: ?1}, 'longitude': {$gte: ?2, $lte: ?3}}")
    List<MangodbSpot> findNearbySpots(Double minLat, Double maxLat, Double minLng, Double maxLng);
}
